package main;

import beans.Forum;
import beans.Mitglied;
import java.util.ArrayList;
import java.util.List;

public class Steuerung {

    private List<Forum> foren = new ArrayList<>();
    private EinUndAusgabe io = new EinUndAusgabe();
    
    /** aktiviert Test-Ausgaben */
    private boolean DEBUG = false;

    public Steuerung() {
        
    }
    
    public Steuerung(EinUndAusgabe io) {
        if (io != null)
            this.io = io;
    }
       
    
    private String textEingeben(String aufforderung) {
        System.out.print(aufforderung);
        String out = io.leseString();
        
        if (DEBUG)
            System.out.println("["+out+"]");
        
        return out;
    }
    
    private int zahlEingeben(String aufforderung) {
        System.out.print(aufforderung);
        int out = io.leseInteger();
        
        if (DEBUG)
            System.out.println("["+out+"]");
        
        return out;
    }

    public void forenAnlegen() {
        int eingabe = -1;
        while (eingabe != 0) {
            System.out.print("Beenden (0) oder Forum anlegen (1): ");
            eingabe = io.leseInteger();
            
            if (DEBUG)
                System.out.println("["+eingabe+"]");
            
            if (eingabe == 1) {
                Forum f = new Forum();
                f.setTitel(textEingeben("Titel: "));
                foren.add(f);
            }
        }
    }

    public void mitgliederAnlegen() {
        int eingabe = -1;
        while (eingabe != 0) {
            System.out.print("Beenden (0) oder Mitglied anlegen (1): ");
            eingabe = io.leseInteger();
            
            if (DEBUG)
                System.out.println("["+eingabe+"]");
            
            if (eingabe == 1) {
                Mitglied m = new Mitglied(io);
                m.setName(textEingeben("Name: "));
                for (Forum f : foren) {
                    System.out.println("Forum: " + f.getTitel() + '\n'
                            + " (0) Passiv bleiben\n"
                            + " (1) nur Zuhören\n"
                            + " (2) Aussagen mitentscheiden");
                    
                    eingabe = -1;
                    while(eingabe < 0 || eingabe > 2)
                        eingabe = zahlEingeben("");
                    
                    if (eingabe >= 1)
                        f.addPropertyChangeListener(m);
                    
                    if (eingabe == 2)
                        f.addVetoableChangeListener(m);
                }
            }
        }
    }

    public void diskutieren() {
        if (foren.isEmpty()) {
            System.out.println("Es existieren keine Foren zur Diskussion.");
            return;
        }
        
        
        int anzahl_foren = foren.size();
        for (int i=0; i<anzahl_foren; i++)
            System.out.println("["+i+"] "+foren.get(i).getTitel());
        
        int eingabe = -1;
        while(eingabe < 0 || eingabe > anzahl_foren)
            eingabe = zahlEingeben("Welches Forum: ");
        
        foren.get(eingabe).setThemen(textEingeben("Thema: "));
    }

    public void dialog() {
        int eingabe = -1;
        System.out.println("Foren einrichten.");
        forenAnlegen();
        System.out.println("Mitglieder einrichten.");
        mitgliederAnlegen();
        while (eingabe != 0) {
            System.out.println("Was wollen Sie machen?\n"
                    + " (0) Programm beenden\n"
                    + " (1) Forum zur Diskussion wählen\n"
                    + " (2) Foren mit verabschiedeten Aussagen ausgeben");
            eingabe = io.leseInteger();
            if (eingabe == 1) {
                diskutieren();
            }
            if (eingabe == 2) {
                for (Forum f : foren) {
                    System.out.print(f);
                }
            }
        }
    }
    
    public List<Forum> getForen() {
        return foren;
    }
}
